import java.util.Stack;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: dings
 * Date: 2024-07-11
 * Time: 10:49
 */
class Solution {
    public boolean isValid(String s) {
        //利用栈先进后出特点 解决问题
        Stack<Character> stack = new Stack<>();
        //遍历字符串
        for(int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);

            //若为左括号 将括号入栈
            if(ch == '(' || ch == '{' || ch == '[') {
                stack.push(ch);
            }else {//遍历到的为右括号 进入else

                //若栈为空 则说明右括号多 立即返回false
                if(stack.isEmpty()) {
                    return false;
                }
                //若栈不为空 则pop出栈 比较是否匹配
                char ch2 = stack.pop();
                switch(ch) {//使用switch语句比较是否匹配 一旦不匹配 立即返回false
                    case ')':
                        if(ch2 != '(') {
                            return false;
                        }
                        break;
                    case ']':
                        if(ch2 != '[') {
                            return false;
                        }
                        break;
                    case '}':
                        if(ch2 != '{') {
                            return false;
                        }
                        break;
                }
            }
        }
        //遍历完成且栈为空 则说明匹配
        if(!stack.isEmpty()) {
            return false;
        }
        return true;
    }
}
public class Test {
}
